package  
{
	import flash.display.MovieClip;
	import flash.events.Event;
	import flash.events.KeyboardEvent;
	import flash.events.MouseEvent;
	import flash.ui.Keyboard;

	/**
	 * ...
	 * @author Thiago Carbonete
	 */
	public class Main extends MovieClip
	{
		var MC_tela       :MovieClip = new MovieClip();
		var MC_tela1      :MovieClip = new MovieClip();
		var MC_nave       :Nave;
		var MC_tiro       :Tiro;
		var MC_tiroB      :TiroB;
		var MC_inimigo    :Inimigo;
		var MC_cometa     :Cometa;
		var MC_fundo	  :Fundo;
		var MC_gamerover  :GamerOver;
		var MC_Meteoro    :Meteoro;
		
		var BO_W 		  :Boolean;
		var BO_S 		  :Boolean;
		var BO_A 		  :Boolean;
		var BO_D 		  :Boolean;
		var BO_tiro		  :Boolean;
		
		var delayTiro	  :int = 30;
		var delayTiroB    :int = 30;
		var delayInimigo  :int = 10;
		var delayCometa   :int = 20;
		var delayMeteoro  :int = 10;
		
		var AR_tiro			:Array;
		var AR_tiroB        :Array;
		var AR_inimigo		:Array;
		var AR_cometa		:Array;
		var AR_nave			:Array;
		var AR_Meteoro      :Array;
		
		var VidaNave = 1;
		
		public function Main() 
		{
			addEventListener(Event. ENTER_FRAME, update)
			stage.addEventListener(KeyboardEvent.KEY_DOWN, pressionar)
			stage.addEventListener(KeyboardEvent.KEY_UP, soltar)
			
			AR_cometa = new Array();
			AR_inimigo = new Array();
			AR_tiro = new Array();
			AR_tiroB = new Array();
			AR_nave = new Array();
			AR_Meteoro = new Array();
			
			inicarJogo();
		}
		
		private function inicarJogo():void 
		{
			addChild(MC_tela)
			
			MC_fundo = new Fundo();
			MC_fundo.x = stage.stageWidth;
			MC_fundo.y = stage.stageHeight / 2;
			MC_tela.addChild(MC_fundo);
			
			MC_nave = new Nave();
			MC_nave.x = 50
			MC_nave.y = stage.stageHeight / 2;
			MC_tela.addChild(MC_nave);
			AR_nave.push(MC_nave);
		}
		
		private function update(e:Event):void
		{
			moveMC_nave();
			criarInimigo();
			limitarTela();
			criarCometa();
			criarMeteoro();
			MC_fundo.update();
			removerInimigo();
			removerCometa();
			removerMeteoro();
			removerTiro();
			removerTiroB();
			tiroInimigo();
			colisao1();
			colisao2();
			colisao3();
			colisao4();
			colisao5();
			colisao6();
			colisao7();
			gameOver()
			
			if (MC_tiroB != null)
			{
			  for each (MC_tiroB in AR_tiroB)
			  {
				 MC_tiroB.update();
			  }
			}
			if (MC_tiro != null)
			{
				for each (MC_tiro in AR_tiro)
			{
				MC_tiro.update();
			}
			}
			if (MC_inimigo != null)
			{
				for each (MC_inimigo in AR_inimigo)
			{
				MC_inimigo.update();
			}
			}
			if (MC_cometa != null)
			{
				for each (MC_cometa in AR_cometa)
				{
					MC_cometa.update();
				}
			}
			if (MC_Meteoro != null)
			{
				for each (MC_Meteoro in AR_Meteoro)
				{
					MC_Meteoro.update();
				}
			}
		}
		
		public function moveMC_nave():void
		{
			if (BO_W == true)
			{
				MC_nave.y -= 8
			}
			if (BO_S == true)
			{
				MC_nave.y += 8
			}
			if (BO_D == true)
			{
				MC_nave.x += 8
			}
			if (BO_A == true)
			{
				MC_nave.x -= 8
			}
			if (BO_tiro == true)
			{
				delayTiro --
				
					if (delayTiro <= 0)
					{
						MC_tiro = new Tiro()
						MC_tiro.x = MC_nave.x + 30;
						MC_tiro.y = MC_nave.y + 3;
						MC_tela.addChild(MC_tiro);
						AR_tiro.push(MC_tiro);
						delayTiro = 10;
						
					}
					
			}
			
		}
		
		private function tiroInimigo():void
		{
				delayTiroB--
				
			if (MC_inimigo != null)
			{
				if (delayTiroB <= 0)
				{
					MC_tiroB = new TiroB()
					MC_tiroB.x = MC_inimigo.x -30;
					MC_tiroB.y = MC_inimigo.y;
					MC_tela.addChild(MC_tiroB);
					AR_tiroB.push(MC_tiroB);
					delayTiroB = 30; 
				}
			}
		}
		
		private function pressionar (e:KeyboardEvent):void
		{
			switch(e.keyCode)
			{
				case Keyboard.W:
					BO_W = true;
					break;
					
				case Keyboard.S:
					BO_S = true;
					break
					
					case Keyboard.A:
						BO_A = true;
						break
						
						case Keyboard.D:
							BO_D = true;
							break
							
						case Keyboard.SPACE:
								BO_tiro = true;
								break;
			}
		}
		private function soltar (e:KeyboardEvent):void
		{
			switch(e.keyCode)
			{
				case Keyboard.W:
					BO_W = false;
					break;
					
					case Keyboard.S:
						BO_S = false;
						break;
						
					case Keyboard.A:
						BO_A = false;
						break;
						
					case Keyboard.D:
						BO_D = false;
						break;
						
					
					case Keyboard.SPACE:
						BO_tiro = false;
						delayTiro = 1;
						break	
			}
		}
		public function criarCometa():void
		{
			delayCometa--
			if (delayCometa <= 0)
			{
				MC_cometa = new Cometa;
				MC_cometa.x = 810;
				MC_cometa.y = Math.random() * 375;
				MC_tela.addChild(MC_cometa);
				AR_cometa.push(MC_cometa);
				delayCometa = 50;
			}
		}
		
		public function criarMeteoro():void
		{
			delayMeteoro--
			if (delayMeteoro <= 0)
			{
				MC_Meteoro = new Meteoro;
				MC_Meteoro.x = 810;
				MC_Meteoro.y = Math.random() * 375;
				MC_tela.addChild(MC_Meteoro);
				AR_Meteoro.push(MC_Meteoro);
				delayMeteoro = 40;
			}
		}
		
		public function criarInimigo():void
		{
			delayInimigo--
			if (delayInimigo <= 0)
			{
				MC_inimigo = new Inimigo;
				MC_inimigo.x = 810;
				MC_inimigo.y = Math.random() * 375;
				MC_tela.addChild(MC_inimigo);
				AR_inimigo.push(MC_inimigo);
				delayInimigo = 50;
			}
		}
		
		public function limitarTela():void
		{
			if (MC_nave.x <= 0 + MC_nave.width / 2)
			{
				MC_nave.x = 0 + MC_nave.width / 2;
			}
			if (MC_nave.x >= 800 - MC_nave.width / 2)
			{
				MC_nave.x = 800 - MC_nave.width / 2;
			}
			if (MC_nave.y <= 0 + MC_nave.height / 2)
			{
				MC_nave.y = 0 + MC_nave.height / 2;
			}
			if (MC_nave.y >= 450 - MC_nave.height / 2)
			{
				MC_nave.y = 450 - MC_nave.height / 2;
			}
		}
		
		private function removerInimigo():void
		{
			for (var a:int = 0; a < AR_inimigo.length; a++)
			{
				if (AR_inimigo[a].x < 0)
				{
					if (MC_tela.contains(AR_inimigo[a]))
					{
						MC_tela.removeChild(AR_inimigo[a])
						AR_inimigo.splice(a, 1);
					}
				}
			}
		}
		
		private function removerCometa():void
		{
			for (var e:int = 0; e < AR_cometa.length; e++)
			{
				if (AR_cometa[e].x < 0)
				{
					if (MC_tela.contains(AR_cometa[e]))
					{
						MC_tela.removeChild(AR_cometa[e])
						AR_cometa.splice(e, 1);
					}
				}
			}
		}
		
		private function removerMeteoro():void
		{
			for (var q:int = 0; q < AR_Meteoro.length; q++)
			{
				if (AR_Meteoro[q].x < 0)
				{
					if (MC_tela.contains(AR_Meteoro[q]))
					{
						MC_tela.removeChild(AR_Meteoro[q])
						AR_Meteoro.splice(q, 1);
					}
				}
			}
		}
		
		private function removerTiro():void
		{
			for (var t:int = 0; t < AR_tiro.length; t++)
			{
				if (AR_tiro[t].x > 800)
				{
					if (MC_tela.contains(AR_tiro[t]))
					{
						MC_tela.removeChild(AR_tiro[t])
						AR_tiro.splice(t, 1);
					}
				}
			}
		}
		private function removerTiroB():void
		{
			for (var p:int = 0; p < AR_tiroB.length; p++)
			{
				if (AR_tiroB[p].x < 0)
				{
					if (MC_tela.contains(AR_tiroB[p]))
					{
						MC_tela.removeChild(AR_tiroB[p])
						AR_tiroB.splice(p, 1);
					}
				}
			}
		}
		
		public function colisao1():void
		{
			for (var i:int = 0; i < AR_inimigo.length; i++)
			{
				for (var j:int = 0; j < AR_tiro.length; j++)
				{
					if (AR_inimigo[i] != null && AR_tiro[j] != null)
					{
						if (AR_tiro[j].hitTestObject(AR_inimigo[i]))
						{
							MC_tela.removeChild(AR_tiro[j]);
							MC_tela.removeChild(AR_inimigo[i]);
							AR_tiro.splice(j, 1);
							AR_inimigo.splice(i, 1);
						}	
					}
				}
			}
		}
		
		public function colisao2():void
		{
			for (var k:int = 0; k < AR_nave.length; k++) 
			{
				for (var l:int = 0; l < AR_inimigo.length; l++) 
				{
					if (AR_nave[k] != null && AR_inimigo[l] != null)
					{
						if (AR_nave[k].hitTestObject(AR_inimigo[l]))
						{
							MC_tela.removeChild(AR_nave[k]);
							MC_tela.removeChild(AR_inimigo[l]);
							AR_nave.splice(k, 1);
							AR_inimigo.splice(l, 1);
							VidaNave--;
							trace("morre pelo inimigo diabo!!!!");
						}
					}
				}
			}
		}
		
		public function colisao3():void
		{
			for (var m:int = 0; m < AR_nave.length; m++) 
			{
				for (var n:int = 0; n < AR_cometa.length; n++) 
				{
					if (AR_nave[m] != null && AR_cometa[n] != null)
					{
						if (AR_nave[m].hitTestObject(AR_cometa[n]))
						{
							MC_tela.removeChild(AR_nave[m]);
							MC_tela.removeChild(AR_cometa[n]);
							AR_nave.splice(m, 1);
							AR_cometa.splice(n, 1);
							VidaNave--;
							trace("morre pelo cometa diabo!!!!");
						}
					}
				}
			}
		}
		public function colisao4():void
		{
			for (var c:int = 0; c < AR_tiro.length; c++) 
			{
				for (var v:int = 0; v < AR_cometa.length; v++) 
				{
					if (AR_tiro[c] != null && AR_cometa[v] != null)
					{
						if (AR_tiro[c].hitTestObject(AR_cometa[v]))
						{
							MC_tela.removeChild(AR_tiro[c]);
							AR_tiro.splice(c, 1);
							trace("Boom!!!");
						}
					}
				}
			}
		}
		
		public function colisao5():void
		{
			for (var z:int = 0; z < AR_tiroB.length; z++) 
			{
				for (var x:int = 0; x < AR_nave.length; x++) 
				{
					if (AR_tiroB[z] != null && AR_nave[x] != null)
					{
						if (AR_nave[x].hitTestObject(AR_tiroB[z]))
						{
							MC_tela.removeChild(AR_tiroB[z]);
							MC_tela.removeChild(AR_nave[x]);
							AR_tiroB.splice(z, 1);
							AR_nave.splice(x, 1);
							VidaNave--;
							trace("Boom!!!");
						}
					}
				}
			}
		}
		public function colisao6():void
		{
			for (var o:int = 0; o < AR_Meteoro.length; o++)
			{
				for (var p:int = 0; p < AR_tiro.length; p++)
				{
					if (AR_Meteoro[o] != null && AR_tiro[p] != null)
					{
						if (AR_Meteoro[o].hitTestObject(AR_tiro[p]))
						{
							MC_tela.removeChild(AR_Meteoro[o]);
							MC_tela.removeChild(AR_tiro[p]);
							AR_Meteoro.splice(o, 1);
							AR_tiro.splice(p, 1);
							
						}
					}
				}
			}
		}
		
		public function colisao7():void
		{
			for (var f:int = 0; f < AR_Meteoro.length; f++)
			{
				for (var g:int = 0; g < AR_nave.length; g++)
				{
					if (AR_Meteoro[f] != null && AR_nave[g] != null)
					{
						if (AR_Meteoro[f].hitTestObject(AR_nave[g]))
						{
							MC_tela.removeChild(AR_Meteoro[f]);
							MC_tela.removeChild(AR_nave[g]);
							AR_Meteoro.splice (f, 1);
							AR_nave.splice (g, 1);
							VidaNave--;
						}
					}
				}
			}
		}
		
		private function gameOver():void
		{
			if (VidaNave == 0)
			{
				VidaNave = 3;
				removeChild(MC_tela);
				AR_tiro.length	= 0;
		        AR_tiroB.length = 0;
		        AR_inimigo.length = 0;
		        AR_cometa.length = 0;
		        AR_nave.length = 0;
				
				removeEventListener(Event. ENTER_FRAME, update)
				stage.removeEventListener(KeyboardEvent.KEY_DOWN, pressionar)
				stage.removeEventListener(KeyboardEvent.KEY_UP, soltar)
				
				addChild(MC_tela1)
				MC_gamerover = new GamerOver
				MC_gamerover.x = stage.stageWidth / 2;
				MC_gamerover.y = stage.stageHeight / 2;
				MC_tela1.addChild(MC_gamerover);
				
				
				
				
				
			}
			
		}
		
	}

}